﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Data.Sql;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Clinica_Frba.UserInterface.ABM.Profesional;

namespace Clinica_Frba.DataClasses
{
    public class Afiliado : Persona
    {
        public int afil_id { get; set; }
        public decimal afil_Grupo_familiar { get; set; }
        public decimal afil_Estado_Civil { get; set; }
        public decimal afil_Plan_Medico { get; set; }
        public String usuario { get; set; }
        public int rol_afiliado { get; set; }
        public bool Activo { get; set; }


        public Afiliado()
        { }


        public Afiliado(int codigoAfiliado)
        {
            afil_id = codigoAfiliado;
            List<SqlParameter> ListaParametros = new List<SqlParameter>();
            ListaParametros.Add(new SqlParameter("@afiliado", codigoAfiliado));

            SqlDataReader lector = DataRepository.RepositoryBase.realizarConsulta("SELECT * FROM vacuna_gdd.Afiliado JOIN vacuna_gdd.Persona ON afil_dni_persona = pers_dni where afil_id=@afiliado", "Texto", ListaParametros);

            if (lector.HasRows)
            {
                lector.Read();

                afil_Grupo_familiar = (decimal)lector["afil_grupo_familiar"];
                afil_Plan_Medico = (decimal)lector["afil_plan_medico"];
                afil_Estado_Civil = (decimal)lector["pers_estado_civil"];
                Activo = Convert.ToBoolean(lector["afil_habilitado"]);
            }
        }

        public Afiliado(String username)
        {
            usuario = username;
            List<SqlParameter> ListaParametros = new List<SqlParameter>();
            ListaParametros.Add(new SqlParameter("@usuario", usuario));

            SqlDataReader lector = DataRepository.RepositoryBase.realizarConsulta("SELECT * FROM vacuna_gdd.Afiliado JOIN vacuna_gdd.usuario_rol ON afil_username = ur_usr_name where afil_username=@usuario", "Texto", ListaParametros);

            if (lector.HasRows)
            {
                lector.Read();
                afil_id = Convert.ToInt32(lector["afil_id"]);
                rol_afiliado = Convert.ToInt32(lector["ur_rol_id"]);
                afil_Grupo_familiar = (decimal)lector["afil_grupo_familiar"];
                afil_Plan_Medico = (decimal)lector["afil_plan_medico"];
                Activo = Convert.ToBoolean(lector["afil_habilitado"]);
            }
        }

        public bool ActualizarAtencion(DateTime hora, string sintomas, string diagnosticos, int cod_Atencion)
        {
            List<SqlParameter> ListaParametros = new List<SqlParameter>();
            ListaParametros.Add(new SqlParameter("@afiliado", this.afil_id));
            ListaParametros.Add(new SqlParameter("@hora_atencion", hora));
            ListaParametros.Add(new SqlParameter("@diagnostico", diagnosticos));
            ListaParametros.Add(new SqlParameter("@sintomas", sintomas));
            ListaParametros.Add(new SqlParameter("@id", cod_Atencion));

            return DataRepository.RepositoryBase.InsertarElementos("UPDATE vacuna_gdd.Atencion_medica SET atme_sintomas=@sintomas, atme_diagnostico=@diagnostico, atme_fecha_hora=@hora_atencion WHERE atme_id=@id", "Texto", ListaParametros);
        }

        public bool CrearAtencion(int bonoConsulta, int turno)
        {
            List<SqlParameter> ListaParametros = new List<SqlParameter>();
            ListaParametros.Add(new SqlParameter("@bono_consulta", bonoConsulta));
            ListaParametros.Add(new SqlParameter("@id", turno));

            return DataRepository.RepositoryBase.InsertarElementos("INSERT INTO vacuna_gdd.Atencion_medica(atme_id,atme_bc_id) VALUES (@id, @bono_consulta)", "Texto", ListaParametros);
        }



        public bool Comprabono(Compra_bono unaCompra_bono)
        {
           // int ret = -1;
            try
            {
                List<SqlParameter> ListaParametros = new List<SqlParameter>();
                ListaParametros.Add(new SqlParameter("@persona", this.afil_id));
                ListaParametros.Add(new SqlParameter("@fecha", unaCompra_bono.cobo_fecha_compra));
                ListaParametros.Add(new SqlParameter("@plan_medico", unaCompra_bono.cobo_plan));
                SqlParameter paramRet = new SqlParameter("@ret", System.Data.SqlDbType.Decimal);
                paramRet.Direction = System.Data.ParameterDirection.Output;
                ListaParametros.Add(paramRet);

                //INSERTA LA Compra_bono
                int ret = (int)DataRepository.RepositoryBase.ExecuteSP("vacuna_gdd.hacer_Compra", ListaParametros);

                if (ret != -1)
                {
                    if (unaCompra_bono.BonosConsulta.Count != 0)
                    {
                        foreach (BonoConsulta unBono in unaCompra_bono.BonosConsulta)
                        {
                            AddCompra_Bono_Consulta(ret, unBono);
                        }
                    }
                    if (unaCompra_bono.BonosFarmacia.Count != 0)
                    {
                        foreach (BonoFarmacia unBono in unaCompra_bono.BonosFarmacia)
                        {
                            AddCompra_Bono_Farmacia(ret, unBono);
                        }
                    }
                    return true;
                }
                else { return false; }
            }
            catch { return false; }
        }

        public static bool AddCompra_Bono_Consulta(int Codigo_Compra_bono, BonoConsulta unBono)
        {
            List<SqlParameter> ListaParametros = new List<SqlParameter>();
            ListaParametros.Add(new SqlParameter("@Compra_bono", Codigo_Compra_bono));
            
            
            return DataRepository.RepositoryBase.InsertarElementos("INSERT INTO vacuna_gdd.Bono_Consulta(bc_Compra_bono_id, bc_fecha_impresion, bc_consulta_num, bc_habilitado) VALUES (@Compra_bono, GETDATE(), 0, 1)", "Texto", ListaParametros);
        }

        public static bool AddCompra_Bono_Farmacia(int idCompra_bono, BonoFarmacia unBono)
        {
            List<SqlParameter> ListaParametros = new List<SqlParameter>();
            ListaParametros.Add(new SqlParameter("@Compra_bono", idCompra_bono));

            return DataRepository.RepositoryBase.InsertarElementos("INSERT INTO vacuna_gdd.Bono_Farmacia(bf_Compra_bono, bf_fecha_impresion, bf_fecha_vencimiento, bf_habilitado) VALUES (@Compra_bono, GETDATE(), GETDATE()+60, 1)", "Texto", ListaParametros);
        }

        public int TraerProximoTurno(DateTime fecha, int codEspecialidad, int codProfesional)
        {
            int turno = -1;

            List<SqlParameter> ListaParametros = new List<SqlParameter>();
            ListaParametros.Add(new SqlParameter("@horario", fecha));
            ListaParametros.Add(new SqlParameter("@especialidad", codEspecialidad));
            ListaParametros.Add(new SqlParameter("@profesional", codProfesional));
            ListaParametros.Add(new SqlParameter("@afiliado", afil_id));
            String query = @"SELECT turno_id
                            FROM vacuna_gdd.Turno
                            WHERE turn_prof_id = @profesional JOIN vacuna_gdd.Profesional_especialidad ON turn_prof_id = ep_prof_id 
                            AND turn_afiliado_id = @afiliado 
                            AND ep_id = @especialidad
					                AND CONVERT(DATE,turn_fechahora) = CONVERT(DATE,@horario)";

            SqlDataReader lector = DataRepository.RepositoryBase.realizarConsulta(query, "Texto", ListaParametros);

            if (lector.HasRows)
            {
                lector.Read();
                turno = (int)(decimal)lector["turn_id"];
            }
            return turno;
        }

    }
}